package co.edu.udea.iw.service.impl;

import java.sql.Time;
import java.util.Date;
import java.util.List;

import co.edu.udea.iw.dao.DispositivoDAO;
import co.edu.udea.iw.dao.PrestamoDAO;
import co.edu.udea.iw.dao.SolicitudDAO;
import co.edu.udea.iw.dao.TipoDispositivoDAO;
import co.edu.udea.iw.dto.Dispositivo;
import co.edu.udea.iw.dto.Prestamo;
import co.edu.udea.iw.dto.Solicitud;
import co.edu.udea.iw.dto.TipoDispositivo;
import co.edu.udea.iw.dto.Usuario;
import co.edu.udea.iw.exception.IWDaoException;
import co.edu.udea.iw.exception.IWServiceException;
import co.edu.udea.iw.service.AdministradorService;

/**
 * Clase que implementa (sobrescribe) los metodos del AdministradorService
 * 
 * @author Santiago Ruiz
 * @author Bladimir Velez
 *
 */
public class AdministradorServiceImpl implements AdministradorService {

	private PrestamoDAO prestamoDAO;

	private SolicitudDAO solicitudDAO;

	private DispositivoDAO dispositivoDAO;

	private TipoDispositivoDAO tipoDispositivoDAO;

	/**
	 * @return the prestamoDAO
	 */
	public PrestamoDAO getPrestamoDAO() {
		return prestamoDAO;
	}

	/**
	 * @param prestamoDAO
	 *            the prestamoDAO to set
	 */
	public void setPrestamoDAO(PrestamoDAO prestamoDAO) {
		this.prestamoDAO = prestamoDAO;
	}

	/**
	 * @return the solicitudDAO
	 */
	public SolicitudDAO getSolicitudDAO() {
		return solicitudDAO;
	}

	/**
	 * @param solicitudDAO
	 *            the solicitudDAO to set
	 */
	public void setSolicitudDAO(SolicitudDAO solicitudDAO) {
		this.solicitudDAO = solicitudDAO;
	}

	/**
	 * @return the dispositivoDAO
	 */
	public DispositivoDAO getDispositivoDAO() {
		return dispositivoDAO;
	}

	/**
	 * @param dispositivoDAO
	 *            the dispositivoDAO to set
	 */
	public void setDispositivoDAO(DispositivoDAO dispositivoDAO) {
		this.dispositivoDAO = dispositivoDAO;
	}

	/**
	 * @return the tipoDispositivoDAO
	 */
	public TipoDispositivoDAO getTipoDispositivoDAO() {
		return tipoDispositivoDAO;
	}

	/**
	 * @param tipoDispositivoDAO
	 *            the tipoDispositivoDAO to set
	 */
	public void setTipoDispositivoDAO(TipoDispositivoDAO tipoDispositivoDAO) {
		this.tipoDispositivoDAO = tipoDispositivoDAO;
	}

	@Override
	public Dispositivo consultarDispositivo(Integer idDispositivo)
			throws IWServiceException, IWDaoException {
		Dispositivo dispositivo = null;
		dispositivo = getDispositivoDAO().obtenerDispositivo(idDispositivo);

		if (dispositivo == null)
			throw new IWServiceException(
					"No hay ningun dispositivo con el id : " + idDispositivo);
		return dispositivo;
	}

	@Override
	public List<Dispositivo> consultarDispositivos() throws IWServiceException,
			IWDaoException {
		List<Dispositivo> dispositivos = null;
		dispositivos = getDispositivoDAO().obtenerDispositivos();

		if (dispositivos == null)
			throw new IWServiceException("No hay dispositivos");
		return dispositivos;
	}

	@Override
	public void crearDispositivo(int idDispositivo, String nombreDispositivo,
			String descripcionDispositivo, int cantidad, int disponibles,
			TipoDispositivo tipoDispositivo) throws IWDaoException {
		Dispositivo dispositivo = new Dispositivo(idDispositivo,
				nombreDispositivo, descripcionDispositivo, cantidad,
				disponibles, tipoDispositivo);
		getDispositivoDAO().agregarDispositivo(dispositivo);

	}

	@Override
	public void eliminarDispositivo(int idDispositivo) throws IWDaoException {
		Dispositivo dispositivo = new Dispositivo();
		dispositivo.setIdDispositivo(idDispositivo);
		getDispositivoDAO().eliminarDispositivo(dispositivo);

	}

	@Override
	public void modificarDispositivo(int idDispositivo,
			String nombreDispositivo, String descripcionDispositivo,
			int cantidad, int disponibles, TipoDispositivo tipoDispositivo)
			throws IWDaoException {
		Dispositivo dispositivo = new Dispositivo(idDispositivo,
				nombreDispositivo, descripcionDispositivo, cantidad,
				disponibles, tipoDispositivo);
		getDispositivoDAO().actualizarDispositivo(dispositivo);

	}

	@Override
	public Solicitud consultarSolicitud(int idSolicitud)
			throws IWServiceException, IWDaoException {
		Solicitud solicitud = null;
		solicitud = getSolicitudDAO().obtenerSolicitud(idSolicitud);

		if (solicitud == null)
			throw new IWServiceException(
					"No hay ninguna solicitud con el id : " + idSolicitud);
		return solicitud;
	}

	@Override
	public List<Solicitud> consultarSolicitudes() throws IWServiceException,
			IWDaoException {
		List<Solicitud> solicitudes = null;
		solicitudes = getSolicitudDAO().obtenerSolicitudes();

		if (solicitudes == null)
			throw new IWServiceException("No hay solicitudes");
		return solicitudes;
	}

	@Override
	public Prestamo consultarPrestamo(int id) throws IWServiceException,
			IWDaoException {
		Prestamo prestamo = getPrestamoDAO().obtenerPrestamo(id);

		if (prestamo == null)
			throw new IWServiceException("No hay ningun prestamo con el id : "
					+ id);
		return prestamo;
	}

	@Override
	public List<Prestamo> consultarPrestamos() throws IWServiceException,
			IWDaoException {
		List<Prestamo> prestamos = getPrestamoDAO().obtenerPrestamos();
		if (prestamos == null)
			throw new IWServiceException("No hay prestamos");
		return prestamos;
	}

	@Override
	public void crearPrestamo(int idPrestamo, Date fechaPrestamo,
			Time horaInicio, Time horaFin, Time horaEntrega, int cantidad,
			String observacion, Usuario usuario, Dispositivo dispositivo)
			throws IWServiceException, IWDaoException {
		Prestamo prestamo = new Prestamo(idPrestamo, fechaPrestamo, horaInicio,
				horaFin, horaEntrega, cantidad, observacion, usuario,
				dispositivo);
		getPrestamoDAO().agregarPrestamo(prestamo);

	}

	@Override
	public void modificarPrestamo(int idPrestamo, Date fechaPrestamo,
			Time horaInicio, Time horaFin, Time horaEntrega, int cantidad,
			String observacion, Usuario usuario, Dispositivo dispositivo)
			throws IWServiceException, IWDaoException {
		Prestamo prestamo = new Prestamo(idPrestamo, fechaPrestamo, horaInicio,
				horaFin, horaEntrega, cantidad, observacion, usuario,
				dispositivo);
		getPrestamoDAO().actualizarPrestamo(prestamo);
		;

	}

	@Override
	public void eliminarPrestamo(int idPrestamo) throws IWServiceException,
			IWDaoException {
		Prestamo prestamo = new Prestamo();
		prestamo.setIdPrestamo(idPrestamo);
		getPrestamoDAO().eliminarPrestamo(prestamo);

	}

	@Override
	public TipoDispositivo consultarTipoDispositivo(String tipoD)
			throws IWServiceException, IWDaoException {
		TipoDispositivo tipoDispositivo = getTipoDispositivoDAO()
				.obtenerTipoDispositivo(tipoD);
		if (tipoDispositivo == null)
			throw new IWServiceException("No hay un tipo dispositivo igual a "
					+ tipoD);
		return tipoDispositivo;
	}

	@Override
	public List<TipoDispositivo> consultarTiposDispositivos()
			throws IWServiceException, IWDaoException {
		List<TipoDispositivo> tipoDispositivos = getTipoDispositivoDAO()
				.obtenerTiposDispositivos();
		if (tipoDispositivos == null)
			throw new IWServiceException("No hay tipos de dispositivos");
		return tipoDispositivos;
	}

	@Override
	public void crearTipoDispositivo(String tipoDispositivo, String descripcion)
			throws IWServiceException, IWDaoException {
		TipoDispositivo tipoD = new TipoDispositivo(tipoDispositivo,
				descripcion);
		getTipoDispositivoDAO().agregarTipoDispositivo(tipoD);

	}

	@Override
	public void eliminarTipoDispositivo(String tipoDispositivo)
			throws IWServiceException, IWDaoException {
		TipoDispositivo tipoD = new TipoDispositivo();
		tipoD.setTipoDispositivo(tipoDispositivo);
		getTipoDispositivoDAO().eliminarTipoDispositivo(tipoD);

	}

	@Override
	public void actualizarTipoDispositivo(String tipoDispositivo,
			String descripcion) throws IWServiceException, IWDaoException {
		TipoDispositivo tipoD = new TipoDispositivo(tipoDispositivo,
				descripcion);
		getTipoDispositivoDAO().actualizarTipoDispositivo(tipoD);

	}

}
